package sv.com.canales.accion;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.*;
import com.example.AdministracionUsuarios.R;
import sv.com.canales.adaptadores.AdaptadorElementosUsuario;
import sv.com.canales.controlador.UsuarioControlador;
import sv.com.canales.modelo.Usuario;

import java.io.Serializable;

public class MyActivity extends Activity {


    public static final int NUEVO_USUARIO = 1;
    public static final int MODIFICAR_USUARIO = 2;

    private EditText usuario;
    private EditText contrasena;
    private ImageView imagenUsuario;
    private UsuarioControlador usuarioControlador;
    private ListView vistaUsuarios;
    private EditText busquedaUsuario;
    private AlertDialog alertaInicioSesion;
    private AdaptadorElementosUsuario adaptadorElementosUsuario;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        //Iniciando la BD
        iniciarBaseDatos();

        //Construcción del AlertDialog
        construirAlertaInicioSesion();
        alertaInicioSesion.show();

        //Contrucción ListView
        this.vistaUsuarios = (ListView) findViewById(R.id.lvUsuarios);

        //Construcción del buscador ListView
        this.busquedaUsuario = (EditText) findViewById(R.id.txtBusquedaUsuario);

        asociarEventosBusquedaUsuarios();
        asociarEventosListView();


    }

    private void asociarEventosListView() {
        this.vistaUsuarios.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Intent intentRegistroUsuario = new Intent(getApplicationContext(), RegistroUsuario.class);
                intentRegistroUsuario.putExtra("usuarioExistente","S");
                intentRegistroUsuario.putExtra("pseudonimoUsuario", MyActivity.this.adaptadorElementosUsuario.getItem(i));
                startActivityForResult(intentRegistroUsuario,MyActivity.MODIFICAR_USUARIO);
            }
        });
    }


    public void  asociarEventosBusquedaUsuarios(){
        this.busquedaUsuario.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
                cargandoListaUsuarios(charSequence.toString());
            }

            @Override
            public void afterTextChanged(Editable editable) {
            }
        });
    }



    private void iniciarBaseDatos() {
        this.usuarioControlador = new UsuarioControlador(this);
    }


    private void construirAlertaInicioSesion(){

        AlertDialog.Builder alertaInicioSesion = new AlertDialog.Builder(this);
        alertaInicioSesion.setTitle("Inicio Sesion");
        alertaInicioSesion.setCancelable(false);

        LayoutInflater inicioSesionLayout = this.getLayoutInflater();
        View inicioSesion = inicioSesionLayout.inflate(R.layout.incio_sesion,null);
        asociarEventosComponentesInicioSesion(inicioSesion);
        alertaInicioSesion.setView(inicioSesion);
        alertaInicioSesion.setPositiveButton("Ingresar", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {

            }
        });
        alertaInicioSesion.setNeutralButton("Registrarse", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Intent registrarUsuarioIntent = new Intent(getApplicationContext(), RegistroUsuario.class);
                registrarUsuarioIntent.putExtra("usuarioExistente","N");
                startActivityForResult(registrarUsuarioIntent,MyActivity.NUEVO_USUARIO);
            }
        });



        this.alertaInicioSesion = alertaInicioSesion.create();
        this.alertaInicioSesion.setOnShowListener(new DialogInterface.OnShowListener(){
            @Override
            public void onShow(DialogInterface dialog) {
                    Button button = MyActivity.this.alertaInicioSesion.getButton(DialogInterface.BUTTON_POSITIVE);
                    button.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {

                            boolean validar = isUsuarioValido();
                            if(validar){
                                Toast.makeText(getApplicationContext(),"Bienvenido",Toast.LENGTH_SHORT).show();
                                MyActivity.this.alertaInicioSesion.dismiss();
                            }else{
                                Toast.makeText(getApplicationContext(),"Usuario o contraseña invalidos",Toast.LENGTH_SHORT).show();
                            }

                        }
                    });
            }
        });


    }


    private void asociarEventosComponentesInicioSesion(View inicioSesion){
        this.usuario = (EditText) inicioSesion.findViewById(R.id.txtUsuario);
        this.contrasena = (EditText) inicioSesion.findViewById(R.id.txtContrasena);
        this.imagenUsuario = (ImageView) inicioSesion.findViewById(R.id.imgUsuario);


        this.usuario.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean b) {
                if(usuario.getText().length()>0 && !usuario.getText().toString().equals("usuario")){
                    System.out.println("Buscando Usuario");
                    Bitmap resultado = usuarioControlador.buscarImagenUsuario(usuario.getText().toString());
                    if(resultado == null){
                        Toast.makeText(getApplicationContext(), "El usuario utilizado no existe", Toast.LENGTH_LONG).show();
                    }else{
                        imagenUsuario.setImageBitmap(resultado);
                    }
                }
            }
        });

    }


    public boolean isUsuarioValido(){
        Usuario u = this.usuarioControlador.validarUsuario(this.usuario.getText().toString(), this.contrasena.getText().toString());
        if(u!= null){
            //Cargando todos los usuarios para mostrar en el ListView
            cargandoListaUsuarios(null);
            return true;
        }
        return false;

    }


    private void cargandoListaUsuarios(String usuarioBusqueda){
        String[] identificadores = null;
        if(usuarioBusqueda!=null && usuarioBusqueda.length()>0){
            identificadores = this.usuarioControlador.todosPseudonimosPorCadena(usuarioBusqueda);
        }else{
            identificadores = this.usuarioControlador.todosPseudonimos();
        }
        adaptadorElementosUsuario = new AdaptadorElementosUsuario(this,R.layout.elemento_lista_usuarios,identificadores);
        this.vistaUsuarios.setAdapter(adaptadorElementosUsuario);

    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        System.out.println("Ingresando a obtener respuesta de la actividad " + resultCode);
        if(resultCode == RESULT_CANCELED){
            Toast.makeText(this,"Operación Cancelada",Toast.LENGTH_LONG).show();
        }else{
            int codigo = data.getExtras().getInt("codigoRespuesta",99);
            String desripcion = data.getExtras().getString("descripcionRespuesta");
            Toast.makeText(this, codigo + " - " + desripcion, Toast.LENGTH_LONG).show();
            cargandoListaUsuarios(null);
        }

    }
}
